package com.ala4.oxcafe.boot.manager;

import com.ala4.oxcafe.boot.dto.TokenDTO;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.userdetails.User;

/**
 * @author PING
 * @version 1.0
 * @date 2025/3/3 16:14
 */
public interface UserTokenManager {

    /**
     * 创建token
     *
     * @param customUserDetails 用户信息
     * @return tokenDTO
     */
    TokenDTO createToken(CustomUserDetails customUserDetails);

    /**
     * 创建token-兼容user
     *
     * @param user user
     * @return tokenDTO
     */
    TokenDTO createToken(User user);

    /**
     * 退出登录-清理token
     *
     * @param token token
     */
    void offlineUser(String token);

    /**
     * 退出登录-把用户ID拉入黑名单,下次请求的时候会让用户退出登录
     *
     * @param userId
     */
    void offlineUser(Long userId);

    /**
     * 创建验证码
     *
     * @param captchaId   uuid
     * @param captchaCode 验证码
     */
    void createCaptchaCode(String captchaId, String captchaCode);

    /**
     * 获取验证码
     *
     * @param captchaId uuid
     * @return 验证码
     */
    String getCaptchaCode(String captchaId);

    /**
     * 解析登录成功后的token 从token转成用户信息
     *
     * @param token
     * @return
     */
    AbstractAuthenticationToken checkLoginUserTokenA(String token);
}
